<html>
<head>
<link rel="stylesheet" href="../../js/sh/SyntaxHighlighter.css" type="text/css" />
<script src="../../js/sh/shCore.js"></script>
<script src="../../js/sh/shBrushJava.js"></script>
<style>

* {
font-family:Courier New,monospace;
  padding: 0;
  margin: 0;
  white-space: nowrap;
  font-size: 11px;
}

.dp-highlighter {
  white-space: nowrap;
  overflow: visible;
  width: 700px;
  font-size: 11px;
  font-family:Courier New,monospace;
}
</style>
</head>
<body>
<textarea name="code" class="java:nogutter:nocontrols" rows="15" cols="120">
/*
 * GWT-Ext Widget Library
 * Copyright 2007 - 2008, GWT-Ext LLC., and individual contributors as indicated
 * by the @authors tag. See the copyright.txt in the distribution for a
 * full listing of individual contributors.
 *
 * This is free software; you can redistribute it and/or modify it
 * under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation; either version 3 of
 * the License, or (at your option) any later version.
 *
 * This software is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this software; if not, write to the Free
 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
 * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
 */
 

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.ui.RootPanel;
import com.gwtext.client.core.Connection;
import com.gwtext.client.core.Function;
import com.gwtext.client.core.Template;
import com.gwtext.client.data.SimpleStore;
import com.gwtext.client.data.Store;
import com.gwtext.client.widgets.Panel;
import com.gwtext.client.widgets.Tool;
import com.gwtext.client.widgets.form.ComboBox;
import com.gwtext.client.widgets.tree.AsyncTreeNode;
import com.gwtext.client.widgets.tree.TreeEditor;
import com.gwtext.client.widgets.tree.TreePanel;
import com.gwtext.client.widgets.tree.XMLTreeLoader;

public class EditableTreePanel implements EntryPoint {

    public void onModuleLoad() {
        Panel panel = new Panel();
        panel.setBorder(false);
        panel.setPaddings(15);

        final Store store = new SimpleStore(new String[]{"abbr", "country"}, getCountries());
        store.load();

        final Template template = new Template("<div class=\"x-combo-list-item\">" +
                "<img src=\"images/flags/{abbr}.gif\"> " +
                "{country}<div class=\"x-clear\"></div></div>");

        ComboBox cb = new ComboBox();
        cb.setMinChars(1);
        cb.setFieldLabel("Countries");
        cb.setStore(store);
        cb.setDisplayField("country");
        cb.setMode(ComboBox.LOCAL);
        cb.setTriggerAction(ComboBox.ALL);
        cb.setEmptyText("Select Country");
        cb.setTypeAhead(true);
        cb.setSelectOnFocus(true);
        cb.setWidth(60);
        cb.setResizable(true);
        cb.setTpl(template);
        cb.setTitle("Countries");
        cb.setAllowBlank(false);

        final TreePanel treePanel = new TreePanel();
        treePanel.setWidth(240);
        treePanel.setHeight(400);
        treePanel.setTitle("Editable Tree");
        treePanel.setAnimate(true);
        treePanel.setEnableDD(true);
        treePanel.setContainerScroll(true);
        treePanel.setRootVisible(true);


        final XMLTreeLoader loader = new XMLTreeLoader();
        loader.setDataUrl("data/countries.xml");
        loader.setMethod(Connection.GET);
        loader.setRootTag("countries");
        loader.setFolderTitleMapping("@title");
        loader.setFolderTag("team");
        loader.setLeafTitleMapping("@title");
        loader.setLeafTag("country");
        loader.setQtipMapping("@qtip");
        loader.setDisabledMapping("@disabled");
        loader.setCheckedMapping("@checked");
        loader.setIconMapping("@icon");
        loader.setAttributeMappings(new String[]{"@rank"});

        final AsyncTreeNode root = new AsyncTreeNode("Countries", loader);
        treePanel.setRootNode(root);

        root.expand();
        treePanel.expandAll();

        treePanel.addTool(new Tool(Tool.REFRESH, new Function() {
            public void execute() {
                treePanel.getEl().mask("Loading", "x-mask-loading");
                root.reload();
                root.collapse(true, false);
                Timer timer = new Timer() {
                    public void run() {
                        treePanel.getEl().unmask();
                        root.expand(true, true);
                    }
                };
                timer.schedule(1000);
            }
        }, "Refresh"));

        TreeEditor treeEditor = new TreeEditor(treePanel, cb);

        panel = new Panel();
        panel.setBorder(false);
        panel.add(treePanel);

        RootPanel.get().add(panel);
    }

    private Object[][] getCountries() {
        return new Object[][]{
                new Object[]{"au", "Australia", "Canberra", "Australia",
                        new Integer(18090000), new Integer(7713360)},
                new Object[]{"br", "Brazil", "Brasilia", "South America",
                        new Integer(170000000), new Integer(8547404)},
                new Object[]{"ca", "Canada", "Ottawa", "North America",
                        new Integer(31000000), new Integer(9976140)},
                new Object[]{"cn", "China", "Beijing", "Asia",
                        new Integer(1222017000), new Integer(9596960)},
                new Object[]{"de", "Germany", "Berlin", "Europe",
                        new Integer(80942000), new Integer(356910)},
                new Object[]{"fr", "France", "Paris", "Europe",
                        new Integer(57571000), new Integer(551500)},
                new Object[]{"in", "India", "New Delhi", "Asia",
                        new Integer(913747000), new Integer(3287590)},
                new Object[]{"sc", "Seychelles", "Victoria", "Africa",
                        new Integer(73000), new Integer(280)},
                new Object[]{"us", "United States", "Washington, DC", "North America",
                        new Integer(260513000), new Integer(9372610)},
                new Object[]{"jp", "Japan", "Tokyo", "Asia",
                        new Integer(125422000), new Integer(377800)},
                new Object[]{"ie", "Italy", "Rome", "Eorope",
                        new Integer(57867000), new Integer(301270)},
                new Object[]{"gh", "Ghana", "Accra", "Africa",
                        new Integer(16944000), new Integer(238540)},
                new Object[]{"ie", "Iceland", "Reykjavik", "Europe",
                        new Integer(270000), new Integer(103000)},
                new Object[]{"fi", "Finland", "Helsinki", "Europe",
                        new Integer(5033000), new Integer(338130)},
                new Object[]{"ch", "Switzerland", "Berne", "Europe",
                        new Integer(6910000), new Integer(41290)}
        };
    }
}
</textarea>
<script class="javascript">
dp.SyntaxHighlighter.HighlightAll('code');
</script>
</body>
</html>
